﻿//-----------------------------------------------------------------------------------------
// <copyright file="BlipService.PrivateMessage.cs" company="Jakub Florczyk (www.jakubflorczyk.pl)">
//      Copyright © 2009 Jakub Florczyk (www.jakubflorczyk.pl)
//      http://blipnet.codeplex.com/
// </copyright>
//-----------------------------------------------------------------------------------------

namespace BlipNet
{
    using System;
    using System.Globalization;
    using System.IO;

    /// <summary>
    /// Blip serwis.
    /// </summary>
    public partial class BlipService
    {
        /// <summary>
        /// Pobiera najnowsze prywatne wiadomości do lub od bieżącego użytkownika.
        /// </summary>
        /// <param name="limit">Limit ilości.</param>
        /// <returns>Najnowsze prywatne wiadomości.</returns>
        public Message[] GetPrivateMessages(int limit)
        {
            return RequestGetMany<Message>(String.Format(CultureInfo.InvariantCulture, "/private_messages?limit={0}", limit));
        }

        /// <summary>
        /// Pobiera wszytkie prywatne wiadomości do lub od bieżącego użytkownika nowsze od wiadomości z podanym id.
        /// </summary>
        /// <param name="id">Identyfikator wiadomości.</param>
        /// <returns>Najnowsze prywatne wiadomości.</returns>
        public Message[] GetPrivateMessagesSince(int id)
        {
            return RequestGetMany<Message>(String.Format(CultureInfo.InvariantCulture, "/private_messages/since/{0}", id));
        }

        /// <summary>
        /// Pobiera wiadomość  prywatną o podanym id.
        /// </summary>
        /// <param name="id">Identyfikator wiadomości.</param>
        /// <returns>Prywatna wiadomość.</returns>
        public Message GetPrivateMessage(int id)
        {
            return RequestGet<Message>(String.Format(CultureInfo.InvariantCulture, "/private_messages/{0}", id));
        }

        /// <summary>
        /// Tworzy nową wiadomość prywatną
        /// </summary>
        /// <param name="login">Odbiorca wiadomości.</param>
        /// <param name="body">Treść wiadomości.</param>
        public void AddPrivateMessage(string login, string body)
        {
            this.RequestPost("/private_messages", "private_message[recipient]", login, "private_message[body]", body);
        }

        /// <summary>
        /// Tworzy nową wiadomość prywatną
        /// </summary>
        /// <param name="login">Odbiorca wiadomości.</param>
        /// <param name="body">Treść wiadomości.</param>
        /// <param name="picture">Obrazek update-u.</param>
        /// <param name="progress">Delegator postępu.</param>
        public void AddPrivateMessage(string login, string body, Stream picture, UploadProgress progress)
        {
            this.RequestUpload("/private_messages", "private_message[picture]", "picture.jpg", picture, progress, "private_message[recipient]", login, "private_message[body]", body);
        }

        /// <summary>
        /// Usuwa wiadomość prywatną o podanym id.
        /// </summary>
        /// <param name="id">Indetyfikator wiadomości.</param>
        public void DeletePrivateMessage(int id)
        {
            this.RequestDelete(String.Format(CultureInfo.InvariantCulture, "/private_messages/{0}", id));
        }
    }
}
